# 字符串输出
name = 'tom'
print(name)

a = '''
I am tom
nice to meet you!
'''
# 字符串输入
print(a)
print("我的名字叫：%s" % name)
print(f"我的名字是{name}")

# 切片
# 适用范围：元组、列表、字符串
# 起始位置包含 结束位置不包含
# 从左往右：从零开始 从右往左：从-1开始
str_1 = 'abcde'
print(str_1[1])
print(str_1[4])

str_2 = 'abcdefg'
print(str_2[2:5:2])
print(str_2[2:5])
print(str_2[:5])
print(str_2[1:])
print(str_2[:])
print(str_2[::2])
print(str_2[:-1])
print(str_2[-4:-1])
print(str_2[::-1])

# 查找
# 查找 find 检测某个子串是否包含在这个字符串中，如果存在返回子串开始位置的下标，否则返回-1
# 字符串序列.find(子串，开始位置下标，结束位置下标)
print(str_2.find('bc'))
# index():检测某个子串是否包含在这个字符串中，如果存在返回子串开始位置的下标，否则则报异常
# 字符串序列.index(子串，开始位置下标，结束位置下标)
# rfind():从右开始查找 rindex() 从右开始查找
# count():子串出现的次数 字符串序列.count(子串，开始位置下标，结束位置下标)
my_str = 'hello world and it cast and raven and maven'
print(my_str.index(' '))

# 替换
# 字符串序列.replace(旧子串，新子串，替换次数)
print(my_str.replace('and', 'he', 2))
# 字符串类型的数据修改时，不改变原有字符串，属于不可变字符串

# 字符串序列.split(分割字符，num)
# num表示的是分割字符出现的次数，即将来返回数据个数为num+1
print(my_str.split('and', 2))
print(my_str.split(' ', 3))
# 如果分割字符是原有字符串中的子串，分割后则丢失该子串

# join():用一个字符或子串合并字符串，即将多个字符串合并为一个新的字符串
# 字符或子串.join(多字符串组成的序列)
list_1 = ['a', 'b', 'c', 'd']
t1 = ['e', 'f', 'g', 'h']
print('_'.join(list_1))
print('.'.join(t1))

# capitalize():函数转换后，只有字符串第一个字符大写，其余字符仍小写
# title():字符串每个单词首字母转换成大写
# lower(): 将字符串中大写转小写
# upper():将字符中的小写转大写

# lstrip():删除字符串左侧空白字符
# rstrip():删除字符串右侧空白字符
# strip():删除字符串两侧空白字符
str_3 = "       Hello, world!     "
print(str_3.strip())
print(str_3.lstrip())
print(str_3.rstrip())

# ljust():返回一个原字符串左对齐，并使用指定字符（默认空格）填充至对应长度 的新字符串
# 字符串序列.ljust(长度，填充字符)
# rjust():右对齐、center():居中对齐

# startswith():检查字符串是否以指定子串开头，是则返回True，否则返回False
# 字符串序列.startswith(子串，开始位置下标，结束位置下标)
# 字符串序列.endswith(子串，开始位置下标，结束位置下标) 检查字符串是否以指定子串结尾

# isalpha():如果字符串至少有一个字符，且所有字符都是字母，返回True，否则返回False
# isdigit():如果字符串只包含数字则返回True，否则返回False
# isalnum():如果字符串至少有一个字符且所有字符都是数字或者字母，则返回True,否则返回False
# isspace():如果字符串只包含空白，则返回True,否则返回False
